import  numpy as np

# 一、numpy概述
# numpy（Numerical Python）提供了python对多维数组对象的支持：ndarray，具有矢量运算能力，快速、节省空间。
# numpy支持高级大量的维度数组与矩阵运算，此外也针对数组运算提供大量的数学函数库。

#打印版本
print(np.version.version)

# 二、创建ndarray数组
# ndarray：N维数组对象（矩阵），所有元素必须是相同类型。
# ndarray属性：ndim属性，表示维度个数；shape属性，表示各维度大小；dtype属性，表示数据类型。
#
# 创建ndarray数组函数：
print ('使用列表生成一维数组')
data = [1,2,3,4,5,6]
x = np.array(data)
print('#打印数组')
print(x)
print("#打印数组元素的类型")
print (x.dtype)


print ('使用列表生成二维数组')
data = [[1,2],[3,4],[5,6]]
x = np.array(data)
print('#打印二维数组')
print (x)
print('#打印数组的维度')
print (x.ndim)
print('#打印数组各个维度的长度。shape是一个元组')
print (x.shape)

print ('使用zero/ones/empty创建数组:根据shape来创建')

print('#创建一维长度为6的，元素都是0一维数组')
x = np.zeros(6)
print (x)

print('#创建一维长度为2，二维长度为3的二维0数组')
x = np.zeros((2,3))
print (x)

print('#创建一维长度为2，二维长度为3的二维1数组')
x = np.ones((2,3))
print (x)

print('#创建一维长度为2，二维长度为3,未初始化的二维数组')
x = np.empty((3,3))
print (x)

print ('使用arrange生成连续元素')
print('# [0,1,2,3,4,5,] 开区间')
print (np.arange(6))

print('# [0, 2，4]')
print (np.arange(0,6,2))


#创建随机的多维数组
a1 = np.random.randn(3,1,2)
print(a1)
print(a1.shape)


# 三、指定ndarray数组元素的类型
# NumPy数据类型：
print( '生成指定元素类型的数组:设置dtype属性')
x = np.array([1,2.6,3],dtype = np.int64)

print('# 元素类型为int64')
print( x)
print( x.dtype)
x = np.array([1,2,3],dtype = np.float64)

print('# 元素类型为float64')
print( x)
print( x.dtype)

print( '使用astype复制数组，并转换类型')
x = np.array([1,2.6,3],dtype = np.float64)
y = x.astype(np.int32)
print('# [1 2 3]')
print( y)
print('# [ 1.   2.6  3. ]')
print( x)

z = y.astype(np.float64)
print('# [ 1.  2.  3.]')
print( z)

print( '将字符串元素转换为数值元素')
x = np.array(['1','2','3'],dtype = np.string_)
y = x.astype(np.int32)
print("# ['1' '2' '3']")
print( x)
print("# [1 2 3] 若转换失败会抛出异常")
print( y)

print( '使用其他数组的数据类型作为参数')
x = np.array([ 1., 2.6,3. ],dtype = np.float32);
y = np.arange(3,dtype=np.int32);
print("# [0 1 2]")
print( y)
print("# [ 0.  1.  2.]")
print( y.astype(x.dtype))